FIT2ミニプロ ワーク: サンプルゲームの解説
今後の授業の流れ
残りは実習時間、積極的に講師/TA/SAの時間を取って個別質疑しちゃいましょう
企画書を見た限り、「画面がスクロールするゲーム」or「マップ内をキャラクターが移動するゲーム」を実装したい人が多そう
授業は今日を含めて残5回
11/25, 12,02 はひたすら設計と実装を
実際のゲーム内容に関してフィードバックを相互に行う時間
1人持ち時間最大15分
5分程度の企画/ゲーム説明
残り時間で相互フィードバックやアドバイスタイム
ある程度動くものが出来ていることが望ましい
動いていない機能に関しては企画書/概要設計書/詳細設計書で解説を
成績評価にも含まれます
前回授業の復習
補足説明
課題提出期限に関して
授業直前の火曜日23:59までの提出を時間内提出として扱います
クラスとメソッド
特定のオブジェクト(e.g. ボール、pad等)に関連する変数や処理をまとめましょうという話
code:list_and_class.py
# without class
for i in range(0, len(xs)):
pyxel.circ(xi, yi, 10, 6) # with ball class
balls = []
balls.append(Ball())
balls.append(Ball())
balls.append(Ball())
for ball in balls:
pyxel.circ(ball.x, ball.y, 10, 6)
クラスおよびメソッドの書き方
code:ball.py
# これがクラス
class Ball:
# これがクラス変数 (クラス定義直下に書く、selfは不要)
# 設計図自体が持つ値なので、生成された全インスタンスでリアルタイムに共有される値
speed = 1
# これがメソッド
# __init__ はインスタンス生成時に必ず実行される特殊なやつ
def __init__(self):
# これがインスタンス変数 (self.xのように書く)
# 設計図をベースに作られたインスタンス(実態)が持つ値なので、インスタンス固有
self.x = 0
self.y = 0
self.vx = 0
self.vy = 0
# クラス定義の中でメソッドを呼ぶ際もself.が必要
self.reset()
def update(self):
self.x += self.vx * Ball.speed # クラス変数の参照時はクラス名を利用
self.y += self.vy * Ball.speed
if self.x < 0 or 200 < self.x:
self.vx *= -1
def reset(self):
self.x = random.randint(0, 199)
self.y = 0
angle = math.radians(random.randint(30, 150))
self.vx = math.cos(angle)
self.vy = math.sin(angle)
Ball.speed += 1
# クラス(設計図)をもとにインスタンス生成
ball1 = Ball() # このタイミングで class Ballの__init__が実行される
ball2 = Ball() # このタイミングで class Ballの__init__が実行される
# インスタンス変数や関数は .x のようにアクセス可能
print(ball1.x)
ball1.update()
# クラス変数を参照したい場合はインスタンスでなくクラス名で参照
Ball.speed = 5
概要設計書のサンプル
詳細設計書のサンプル
概要設計をまずは書いてみた上でゲームの本実装にはいるのが良いかも